package org.javaboy.demo;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * 每个 Bean 初始化的时候，都会触发这里的两个方法
 */
public class UserBeanPostProcessor implements BeanPostProcessor {
    /**
     * 初始化就是 Bean 的初始化方法，例如 afterPropertiesSet 和 init 方法
     * @param bean  这个参数实际上就是对象本身了
     * @param beanName 这个就是对象的名字
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization");
        System.out.println("bean.getClass() = " + bean.getClass());
        System.out.println("beanName = " + beanName);
        if (beanName.equals("user")) {
            //说明就是 bean 就是 user 对象
            User user = (User) bean;
            user.setUsername("zhangsan");
            //这里直接返回 user，这样，最终注册到 Spring 容器中的 Bean 里边的 user 的 username 这个属性就有值了
            return user;
        }
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization");
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }
}
